/// 1. 创建空的 vector
/// 2. 创建包含初始值的vector
/// 3. 丢弃vector
/// 4. 读取元素
/// 5. 更新
/// 6. 遍历
/// 7. 使用枚举

fn main() {
    // 创建空的vector: 注意，如果创建空的vector，需要将变量加上mut，否则无意义
    let mut v: Vec<i32> = Vec::new();
    v.push(1);

    // 创建包含初始值的vector, 这里vec!的v是小写的
    let v = vec![1, 2, 3];

    // v1的作用域
    {
        let v1 = vec![1, 2, 3];
    }

    // vec元素读取
    println!("{:?}", v);
    println!("v[1] = {}", &v[1]);
    let one = &v[0];
    println!("one = {}", one);

    // 使用match读取
    match v.get(3) {
        None => {println!("match None")}
        Some(v) => {println!("match v = {}", v)}
    }

    // 更新
    let mut v2 = Vec::new();
    v2.push(1);
    v2.push(3);
    v2.push(7);
    // 不可变的变量
    for i in &v2 {
        println!("for i v2: {}", i);
    }
    // 可变的遍历
    for i in &mut v2 {
        // 因为这里是引用，如果要有更新，需要解引用才能用，所以需要加上*
        *i += 1;
        println!("for i mut v2: {}", i);
    }
    // 遍历添加数据
    for i in 1..10 {
        v2.push(i);
    }
    println!("{:?}", v2);

    // 调用枚举
    let c = vec![
        Context::Text(String::from("hello")),
        Context::Int(-1),
        Context::Float(3.14),
    ];
    println!("c = {:?}", &c);

    // 补充点
    let mut v3 = vec![1, 2, 3, 4, 5];

    let first = &v3[0];
    &v3.push(6);
    // println!("first = {}", first); // 不可变引用调用后在调用可变引用时会报错

}
#[derive(Debug)]
// 枚举
enum Context {
    Text(String),
    Float(f32),
    Int(i32),
}

